home *** CD-ROM | disk | FTP | other *** search
/ PC go! 2018 January / PCgo 01-2018 CD-ROM Germany.iso / nw.pak / Unnamed File 004872.txt < prev    next >
Encoding:
Text File  |  2015-07-29  |  4.2 KB  |  126 lines

  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4.  
  5. define("mojo/public/js/connection", [
  6.   "mojo/public/js/bindings",
  7.   "mojo/public/js/connector",
  8.   "mojo/public/js/core",
  9.   "mojo/public/js/router",
  10. ], function(bindings, connector, core, router) {
  11.  
  12.   var Router = router.Router;
  13.   var EmptyProxy = bindings.EmptyProxy;
  14.   var EmptyStub = bindings.EmptyStub;
  15.   var ProxyBindings = bindings.ProxyBindings;
  16.   var StubBindings = bindings.StubBindings;
  17.   var TestConnector = connector.TestConnector;
  18.   var TestRouter = router.TestRouter;
  19.  
  20.   // TODO(hansmuller): the proxy receiver_ property should be receiver$
  21.  
  22.   function BaseConnection(localStub, remoteProxy, router) {
  23.     this.router_ = router;
  24.     this.local = localStub;
  25.     this.remote = remoteProxy;
  26.  
  27.     this.router_.setIncomingReceiver(localStub);
  28.     if (this.remote)
  29.       this.remote.receiver_ = router;
  30.  
  31.     // Validate incoming messages: remote responses and local requests.
  32.     var validateRequest = localStub && localStub.validator;
  33.     var validateResponse = remoteProxy && remoteProxy.validator;
  34.     var payloadValidators = [];
  35.     if (validateRequest)
  36.       payloadValidators.push(validateRequest);
  37.     if (validateResponse)
  38.       payloadValidators.push(validateResponse);
  39.     this.router_.setPayloadValidators(payloadValidators);
  40.   }
  41.  
  42.   BaseConnection.prototype.close = function() {
  43.     this.router_.close();
  44.     this.router_ = null;
  45.     this.local = null;
  46.     this.remote = null;
  47.   };
  48.  
  49.   BaseConnection.prototype.encounteredError = function() {
  50.     return this.router_.encounteredError();
  51.   };
  52.  
  53.   function Connection(
  54.       handle, localFactory, remoteFactory, routerFactory, connectorFactory) {
  55.     var routerClass = routerFactory || Router;
  56.     var router = new routerClass(handle, connectorFactory);
  57.     var remoteProxy = remoteFactory && new remoteFactory(router);
  58.     var localStub = localFactory && new localFactory(remoteProxy);
  59.     BaseConnection.call(this, localStub, remoteProxy, router);
  60.   }
  61.  
  62.   Connection.prototype = Object.create(BaseConnection.prototype);
  63.  
  64.   // The TestConnection subclass is only intended to be used in unit tests.
  65.   function TestConnection(handle, localFactory, remoteFactory) {
  66.     Connection.call(this,
  67.                     handle,
  68.                     localFactory,
  69.                     remoteFactory,
  70.                     TestRouter,
  71.                     TestConnector);
  72.   }
  73.  
  74.   TestConnection.prototype = Object.create(Connection.prototype);
  75.  
  76.   function createOpenConnection(
  77.       messagePipeHandle, client, localInterface, remoteInterface) {
  78.     var stubClass = (localInterface && localInterface.stubClass) || EmptyStub;
  79.     var proxyClass =
  80.         (remoteInterface && remoteInterface.proxyClass) || EmptyProxy;
  81.     var proxy = new proxyClass;
  82.     var stub = new stubClass;
  83.     var router = new Router(messagePipeHandle);
  84.     var connection = new BaseConnection(stub, proxy, router);
  85.  
  86.     ProxyBindings(proxy).connection = connection;
  87.     ProxyBindings(proxy).local = connection.local;
  88.     StubBindings(stub).connection = connection;
  89.     StubBindings(proxy).remote = connection.remote;
  90.  
  91.     var clientImpl = client instanceof Function ? client(proxy) : client;
  92.     if (clientImpl)
  93.       StubBindings(stub).delegate = clientImpl;
  94.  
  95.     return connection;
  96.   }
  97.  
  98.   // Return a message pipe handle.
  99.   function bindProxyClient(clientImpl, localInterface, remoteInterface) {
  100.     var messagePipe = core.createMessagePipe();
  101.     if (messagePipe.result != core.RESULT_OK)
  102.       throw new Error("createMessagePipe failed " + messagePipe.result);
  103.  
  104.     createOpenConnection(
  105.       messagePipe.handle0, clientImpl, localInterface, remoteInterface);
  106.     return messagePipe.handle1;
  107.   }
  108.  
  109.   // Return a proxy.
  110.   function bindProxyHandle(proxyHandle, localInterface, remoteInterface) {
  111.     if (!core.isHandle(proxyHandle))
  112.       throw new Error("Not a handle " + proxyHandle);
  113.  
  114.     var connection = createOpenConnection(
  115.         proxyHandle, undefined, localInterface, remoteInterface);
  116.     return connection.remote;
  117.   }
  118.  
  119.   var exports = {};
  120.   exports.Connection = Connection;
  121.   exports.TestConnection = TestConnection;
  122.   exports.bindProxyHandle = bindProxyHandle;
  123.   exports.bindProxyClient = bindProxyClient;
  124.   return exports;
  125. });
  126.